# -*- coding: utf-8 -*-

from django import forms
from .models import (
    Clientes,
    Rubros,
    Gastos,
    CuentasClientes,
    BancoPesos,
    BancoDolares,
    Remitos,
    ItemsRemitos,
    Remates,
    ItemsRemates,
    Cotizaciones
)

import datetime


## CHOICES

Monedas = (
    ('', ''),
    ('UYU', '$'),
    ('USD', 'U$S'),
)
MonedasCotizacion = (
    ('USD', 'U$S'),
    ('EUR', '€'),
)
Dias = (
    ('', 'Día'),
    (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10),
    (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16), (17, 17), (18, 18), (19, 19), (20, 20),
    (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), (26, 26), (27, 27), (28, 28), (29, 29), (30, 30), (31, 31),
)
Meses = (
    ('', 'Mes'),
    ('1', 'Enero'),
    ('2', 'Febrero'),
    ('3', 'Marzo'),
    ('4', 'Abril'),
    ('5', 'Mayo'),
    ('6', 'Junio'),
    ('7', 'Julio'),
    ('8', 'Agosto'),
    ('9', 'Setiembre'),
    ('10', 'Octubre'),
    ('11', 'Noviembre'),
    ('12', 'Diciembre'),
)
EstadosRemitos = (
    ('ACTIVO', 'ACTIVO'),
    ('VENDIDO', 'VENDIDO'),
    ('DEVOLUCION', 'DEVOLUCION'),
    ('OTROS', 'OTROS'),
)


## FORMS

class BuscarForm(forms.Form):
    text = forms.CharField(
        label='buscar',
        widget=forms.TextInput(attrs={'size': 32})
    )


class ClientesForm(forms.ModelForm):
    class Meta:
        model = Clientes

    apellido = forms.CharField(
        label='Apellido *',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    nombre = forms.CharField(
        label='Nombre *',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    rut = forms.CharField(
        required=False,
        label='RUT',
        max_length=12,
        help_text='máximo 12 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    direccion = forms.CharField(
        required=False,
        label='Dirección',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    telefono1 = forms.CharField(
        label='Tel 1 *',
        max_length=15,
        help_text='máximo 15 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '15'}),
    )
    telefono2 = forms.CharField(
        required=False,
        label='Tel 2',
        max_length=15,
        help_text='máximo 15 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '15'}),
    )
    email1 = forms.EmailField(
        required=False,
        label='E-mail 1',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toLowerCase()'}),
    )
    email2 = forms.EmailField(
        required=False,
        label='E-mail 2',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toLowerCase()'}),
    )
    diaCumple = forms.ChoiceField(
        required=False,
        label='Día',
        choices=Dias,
    )
    mesCumple = forms.ChoiceField(
        required=False,
        label='Mes',
        choices=Meses,
    )
    observaciones = forms.CharField(
        required=False,
        label='Observaciones',
        widget=forms.Textarea(attrs={'rows': '3', 'cols': '30'}),
    )


class RubrosForm(forms.ModelForm):
    class Meta:
        model = Rubros

    rubro = forms.CharField(
        required=False,
        label='Rubro',
        max_length=50,
        help_text='máximo 50 caracteres',
        error_messages={'max_length': 'Ha excedido el máximo de caracteres permitidos'},
        widget=forms.TextInput(attrs={'size': '30', 'onblur': 'this.value=this.value.toUpperCase()'})
    )


class GastosForm(forms.ModelForm):
    class Meta:
        model = Gastos
        exclude = ['saldoUSD']

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '8', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    rubro = forms.ModelChoiceField(
        required=False,
        label='Rubro',
        queryset=Rubros.objects.all(),
        empty_label="",
    )
    concepto = forms.CharField(
        label='Concepto',
        widget=forms.TextInput(attrs={'size': '50', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    moneda = forms.ChoiceField(
        label='Moneda',
        choices=Monedas,
    )
    debe = forms.FloatField(
        required=False,
        label='Debe',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    haber = forms.FloatField(
        required=False,
        label='Haber',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )


class CuentaClienteForm(forms.ModelForm):

    class Meta:
        model = CuentasClientes
        exclude = ['saldoUSD', 'cliente']

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '8', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    concepto = forms.CharField(
        label='Concepto',
        widget=forms.TextInput(attrs={'size': '70', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    moneda = forms.ChoiceField(
        label='Moneda',
        choices=Monedas,
    )
    debe = forms.FloatField(
        required=False,
        label='Debe',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    haber = forms.FloatField(
        required=False,
        label='Haber',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )


class SelectorMesAnio(forms.Form):
    this_year = datetime.date.today().year
    years_list = range(this_year, this_year - 10, -1)
    Anios = [('', 'Año')]
    for i in years_list:
        year_item = (i, i)
        Anios.append(year_item)

    mes = forms.ChoiceField(
        label='Cambiar mes:',
        choices=Meses,
    )
    anio = forms.ChoiceField(
        label='Año:',
        choices=Anios,
    )


class BancoPesosForm(forms.ModelForm):

    class Meta:
        model = BancoPesos
        exclude = ['saldo']

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '7', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    fechaAcreditacion = forms.DateField(
        required=False,
        label='Acreditación',
        widget=forms.DateInput(attrs={'size': '7', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    rubro = forms.CharField(
        label='Rubro',
        widget=forms.TextInput(attrs={'size': '68', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    debe = forms.FloatField(
        required=False,
        label='Debe',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    haber = forms.FloatField(
        required=False,
        label='Haber',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )


class BancoDolaresForm(forms.ModelForm):
    class Meta:
        model = BancoDolares
        exclude = ['saldo']

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '7', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    fechaAcreditacion = forms.DateField(
        required=False,
        label='Acreditación',
        widget=forms.DateInput(attrs={'size': '7', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    rubro = forms.CharField(
        label='Rubro',
        widget=forms.TextInput(attrs={'size': '68', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    debe = forms.FloatField(
        required=False,
        label='Debe',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    haber = forms.FloatField(
        required=False,
        label='Haber',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )


class RemitoForm(forms.ModelForm):
    class Meta:
        model = Remitos

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '8', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    cliente = forms.ModelChoiceField(
        required=False,
        label='Cliente',
        queryset=Clientes.objects.all(),
        empty_label="",
    )
    numeroRemito = forms.IntegerField(
        required=False,
        label='Número de remito',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )


class ItemsRemitoForm(forms.ModelForm):
    class Meta:
        model = ItemsRemitos
        exclude = ['remito']

    numeroLinea = forms.IntegerField(
        label='Núm.',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    descripcion = forms.CharField(
        label='Descripción',
        widget=forms.TextInput(attrs={'size': '80', 'onblur': 'this.value=this.value.toUpperCase()'}),
    )
    base = forms.FloatField(
        initial=0,
        label='Base (U$S)',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    estado = forms.ChoiceField(
        label='Estado',
        choices=EstadosRemitos,
    )


class RemateForm(forms.ModelForm):
    class Meta:
        model = Remates

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '8', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    observaciones = forms.CharField(
        required=False,
        label='Observaciones',
        widget=forms.Textarea(attrs={'rows': '3', 'cols': '30'}),
    )


class ItemsRemateForm(forms.Form):
    numeroRemito = forms.IntegerField(
        required=False,
        label='Remito:',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '4'}),
    )
    numeroLinea = forms.IntegerField(
        label='',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '2'}),
    )


class VenderForm(forms.ModelForm):
    class Meta:
        model = ItemsRemates
        exclude = ['remate', 'articulo', 'numeroLote', 'vendido']

    precioVenta = forms.FloatField(
        label='Precio (U$S)',
        help_text='',
        error_messages={
            'invalid': 'Ingrese solo números!',
        },
        widget=forms.TextInput(attrs={'size': '5'}),
    )
    detalle = forms.CharField(
        required=False,
        label='Detalle de la venta',
        widget=forms.Textarea(attrs={'rows': '3', 'cols': '30'}),
    )
    comprador = forms.ModelChoiceField(
        label='Comprador',
        queryset=Clientes.objects.all(),
        empty_label="",
    )


class CotizacionesForm(forms.ModelForm):

    class Meta:
        model = Cotizaciones

    fecha = forms.DateField(
        label='Fecha',
        widget=forms.DateInput(attrs={'size': '8', 'class': 'date-pick'}),
        help_text='ej.: 31/12/2010',
    )
    moneda = forms.ChoiceField(
        label='Moneda',
        choices=MonedasCotizacion,
    )